package gamble.qna.command;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.connector.ClientAbortException;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

public class DownloadFile extends AbstractView{

 public DownloadFile(){
  //반드시 octet-stream으로 설정해야함
  super.setContentType("application/octet-stream");
 }

 protected void renderMergedOutputModel(Map model, HttpServletRequest request,
		 HttpServletResponse response) throws Exception{
  // TODO Auto-generated method stub

	 //다운로드 파일에 대한 정보을 가져옴
  File file = (File)model.get("downloadFile");
  String str1="";

  
  response.setContentType(getContentType());
  response.setContentLength((int)file.length());
  //response.setHeader("Content-Transfer-Encoding", "binary");
  
  //파일명 가져옴
  String fileName=file.getName().substring(file.getName().indexOf("_")+1);
  
  //파일명이 한글일때 해주는 작업
  str1=URLEncoder.encode(fileName.substring(fileName.indexOf("_")+1),"utf-8");
  str1=str1.replaceAll("\\+","%20");
  
  //파일명을 다운로드 창에 표시
  response.setHeader("Content-Disposition", "attachment;filename="+str1+";");
  
  //다운로드창에 파일에 대한 실제내용을 가져오기 위한 작업 -시작
  OutputStream out = response.getOutputStream();
  FileInputStream fis = null;

  try{	
   fis = new FileInputStream(file);
   FileCopyUtils.copy(fis,out);
  }catch(ClientAbortException ioe){
	  System.out.println("취소");
	 
  }catch(java.io.IOException ioe){
   System.out.println("파일이 존재하지 않습니다.");
   ioe.printStackTrace();
   
 
  
  } finally{
   if(fis != null) fis.close();
  }
  out.flush();
 //다운로드창에 파일에 대한 실제내용을 가져오기 위한 작업 -끝
 }
}
